#include <func.h>

void deleteDir(const char* path);

int main(int argc, char* argv[])
{
    // ./deleteDir dir
    if(argc != 2)
        error(1, 0, "Usage: %s dir", argv[0]);

    deleteDir(argv[1]); 

    return 0;
}

void deleteDir(const char* path)
{
    puts(path);
    // 打开目录
    DIR* stream = opendir(path);

    // 遍历目录流，依次删除每一个目录项
    struct dirent* pdirent = 0;
    while ((pdirent = readdir(stream)) != NULL)
    {
        // 忽略.和..
        if(pdirent->d_name[0] == '.')
            continue;
        // 如果该目录项是目录，则调用deleteDir递归删除
        if(pdirent->d_type == DT_DIR)
        {
            char p[1024];
            sprintf(p, "%s/%s", path, pdirent->d_name);
            deleteDir(p);
        }
        else
        {
            char p[1024];
            sprintf(p, "%s/%s", path, pdirent->d_name);
            if(unlink(p))
                error(1, errno, "unlink");
        }
            // 如果该目录项是文件，则调用unlink删除文件
    }
    if(errno)
        error(1, errno, "readdir");

    // 目录为空了，可以删除该目录了
    rmdir(path);
    // 关闭目录流
    closedir(stream);
}
